/**
 * @file bull_hal_net_mqtt.h
 * @brief 
 * @author yejing (yejh@gongniu.cn)
 * @version 1.0
 * @date 2024-05-22
 * 
 * Copyright 2024-2025 GongNiu Inc. All Rights Reserved.
 * 
 */

#ifndef __BULL_HAL_NET_MQTT_H__
#define __BULL_HAL_NET_MQTT_H__



#ifdef __cplusplus
extern "C" {
#endif

#include "bull_hal_adapter.h"

/**
 * @brief esp mqtt 订阅主题
 * 
 * @param topic 所订阅主题的topic
 * @return int 
 */
OPERATE_RET bull_hal_net_mqtt_client_sub_single( MQTT_CLIENT_HANDLE mqtt_client_handle, const char *topic, int qos );


/**
 * @brief 批量订阅主题
 * 
 * @param mqtt_client_handle 
 * @param topic 
 * @param qos 
 * @return OPERATE_RET 
 */
OPERATE_RET bull_hal_net_mqtt_client_sub_multiple( MQTT_CLIENT_HANDLE mqtt_client_handle, const BULL_MQTT_TOPI_LIST_T *topic_list, int size );

/**
 * @brief 关闭mqtt连接
 * 
 * @return int 
 */
OPERATE_RET bull_hal_net_mqtt_client_destroy( MQTT_CLIENT_HANDLE mqtt_client_handle );


/**
 * @brief 重新连接MQTT客户端
 * 
 * 该函数用于当MQTT客户端的连接断开后重新建立连接。
 * 
 * @param mqtt_client_handle MQTT客户端的句柄，用于标识唯一的客户端实例。
 * @return OPERATE_RET 返回操作的结果状态码。成功返回操作成功的状态码，失败返回相应的错误状态码。
 */
OPERATE_RET bull_hal_net_mqtt_client_reconnect( MQTT_CLIENT_HANDLE mqtt_client_handle );

/**
 * 功能：断开MQTT客户端的连接
 * 参数：
 *      mqtt_client_handle: MQTT客户端的句柄，用于标识和操作特定的MQTT客户端实例。
 * 返回值：
 *      返回操作的结果状态码，具体取值依赖于实现细节，通常成功为正数，错误为负数。
 */
OPERATE_RET bull_hal_net_mqtt_client_disconnect( MQTT_CLIENT_HANDLE mqtt_client_handle );


/**
 * @brief 对esp mqtt 的pub 操作
 * 
 * @param topic 订阅主题
 * @param data 发送数据
 * @param data_len 发送数据的长度
 * @return int 
 */
OPERATE_RET bull_hal_net_mqtt_client_pub( MQTT_CLIENT_HANDLE mqtt_client_handle, const char* topic, const uint8_t* data, const uint32_t data_len, uint8_t qos, uint8_t retain );

/**
 * @brief 连接 MQTT 服务器
 * 
 */
OPERATE_RET bull_hal_net_mqtt_init( MQTT_CLIENT_HANDLE *mqtt_client_handle , BULL_HAL_MQTT_REGISTER_T *register_params );

/**
 * @brief 
 * 
 * @param mqtt_client_handle 
 * @return int 
 */
OPERATE_RET bull_hal_net_mqtt_client_start( MQTT_CLIENT_HANDLE mqtt_client_handle );

/**
 * @brief 停止MQTT客户端
 * 
 * @param mqtt_client_handle 
 * @return int 
 */
OPERATE_RET bull_hal_net_mqtt_client_stop( MQTT_CLIENT_HANDLE mqtt_client_handle );
#ifdef __cplusplus
}
#endif


#endif